package com.yumi.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.time.LocalDateTime;

/**
 * 公告实体类
 */
@Data
@TableName("work_announcement")
@Schema(description = "公告信息")
public class Announcement {

    /**
     * 公告ID
     */
    @TableId(type = IdType.AUTO)
    @Schema(description = "公告ID")
    private Long id;

    /**
     * 公告标题
     */
    @NotBlank(message = "公告标题不能为空")
    @Size(max = 100, message = "公告标题长度不能超过100个字符")
    @Schema(description = "公告标题", required = true)
    private String title;

    /**
     * 公告内容
     */
    @NotBlank(message = "公告内容不能为空")
    @Schema(description = "公告内容", required = true)
    private String content;

    /**
     * 发布人ID
     */
    @NotNull(message = "发布人ID不能为空")
    @Schema(description = "发布人ID", required = true)
    private Long publisherId;

    /**
     * 公告类型：1-普通通知 2-规章制度 3-活动安排 4-紧急事项
     */
    @NotNull(message = "公告类型不能为空")
    @Schema(description = "公告类型：1-普通通知 2-规章制度 3-活动安排 4-紧急事项", required = true)
    private Integer type;

    /**
     * 重要程度：1-普通 2-重要 3-非常重要
     */
    @NotNull(message = "重要程度不能为空")
    @Schema(description = "重要程度：1-普通 2-重要 3-非常重要", required = true, defaultValue = "1")
    private Integer importance;

    /**
     * 生效开始时间
     */
    @NotNull(message = "生效开始时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "生效开始时间", required = true)
    private LocalDateTime startTime;

    /**
     * 生效结束时间（NULL表示永久有效）
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "生效结束时间（NULL表示永久有效）")
    private LocalDateTime endTime;

    /**
     * 是否置顶（0-不置顶，1-置顶）
     */
    @Schema(description = "是否置顶（0-不置顶，1-置顶）", defaultValue = "0")
    private Integer isTop;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "创建时间", accessMode = Schema.AccessMode.READ_ONLY)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "更新时间", accessMode = Schema.AccessMode.READ_ONLY)
    private LocalDateTime updateTime;

    /**
     * 是否删除（0-未删除，1-已删除）
     */
    @TableField("is_deleted")
    @TableLogic
    @Schema(description = "是否删除", hidden = true)
    private Integer deleted;
}